import {AxiosInstance, AxiosRequestConfig} from "axios"
import {GenReqUtilReturnType} from '../types/gen-req-util-type.ts'

/**
 * 获取以 POST 请求方式提交 form 表单格式数据的工具函数<br/>
 * 需要注意的是：使用该方法生成的请求工具函数进行数据的提交，请求的请求头中的 <span style="color:red">
 *     Content-Type 一定会被覆盖设置为 'application/x-www-form-urlencoded'
 * </span>
 *
 * @param {AxiosInstance} axios axios 实例
 * @returns {GenReqUtilReturnType} 返回一个函数，该函数接收一个对象参数，对象参数包含 url、data、config 三个属性，分别表示请求地址、
 * 要提交到后端的数据、请求配置，生成的函数的返回值类型为 Promise<AxiosResponse<any>>
 */
export const genPostForm = (axios: AxiosInstance): GenReqUtilReturnType => {
  return (
    {
      url,
      data = {},
      config = {}
    }: {
      url: string,
      data?: Record<string, any>,
      config?: AxiosRequestConfig<any>
    }) => {
    return axios.post(
      url,
      data,
      {
        ...config,
        headers: {
          ...config?.headers,
          // 设置请求头 Content-Type 为 'application/x-www-form-urlencoded'
          'Content-Type': 'application/x-www-form-urlencoded'
        }
      } as AxiosRequestConfig<any>
    )
  }
}
